package com.yunxi.module.system.mapper.permission;

import com.yunxi.framework.mybatis.core.mapper.BaseMapperX;
import com.yunxi.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.yunxi.module.system.model.permission.MenuDO;
import com.yunxi.module.system.vo.admin.permission.menu.MenuListReqVO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * <p>
 * 菜单 mapper 接口
 * </p>
 *
 * @author lidy
 * @since 2024-05-07
 */
@Mapper
public interface MenuMapper extends BaseMapperX<MenuDO> {

    /**
     * 根据权限标识查询菜单信息
     *
     * @param permission 权限表示
     * @return 菜单信息
     */
    default List<MenuDO> selectListByPermission(String permission) {
        return selectList(MenuDO::getPermission, permission);
    }

    /**
     * 获得菜单列表
     *
     * @param reqVO 查询条件
     * @return 菜单列表
     */
    default List<MenuDO> selectList(MenuListReqVO reqVO) {
        return selectList(new LambdaQueryWrapperX<MenuDO>()
                .likeIfPresent(MenuDO::getName, reqVO.getName())
                .eqIfPresent(MenuDO::getStatus, reqVO.getStatus()));
    }

    /**
     * 根据父菜单编号和菜单名称查询菜单
     *
     * @param parentId 父菜单编号
     * @param name     菜单名称
     * @return 菜单信息
     */
    default MenuDO selectByParentIdAndName(Long parentId, String name) {
        return selectOne(MenuDO::getParentId, parentId, MenuDO::getName, name);
    }

    /**
     * 根据父级菜单编号查询数量
     *
     * @param parentId 父级菜单编号
     * @return 数量
     */
    default Long selectCountByParentId(Long parentId) {
        return selectCount(MenuDO::getParentId, parentId);
    }
}
